//入口文件 此模块用来导入公共的css和js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
import './assets/css/main.css'
import './assets/fonts/iconfont.css'
// 引入树形表格插件
import ZkTable from 'vue-table-with-tree-grid'
Vue.component('tree-table', ZkTable)
// 导入进度条插件 并导入相应的样式
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 以上组件(.css)都是基于vue的 导入 创建一个vue即可在所有组件使用 无需挂载到原型上

// 但axios方法光导入不行只能在当前文件中使用 只要是js方法想让所有的组件都可以使用
// 就把它挂载到vue对象的原型对象上即可

// 在组件中打印this 可得到组件对象 它的原型对象是vue对象 vue对象的原型对象里面有很多属性
// 所有的组件都可以访问vue的原型对象里的属性 所以挂载在这里
// 否则就要在需要用axios的组件中分别倒入
import axios from 'axios'
// 挂载axios到vue的原型对象中 在所有组件中就可以直接使用this.axios调用了
Vue.prototype.axios = axios
//设置根路由  65  72  58
axios.defaults.baseURL = 'http://192.168.14.65:8888/api/private/v1'

//除了登录请求以外 其他的请求都需要携带token  如果请求太多需要给每一个请求添加 很麻烦  
// 可以通过请求拦截器添加token到请求头中 按接口文档的要求 名为authorization
//拦截器的参数为一个函数 函数的参数为请求或响应的数据 操作之后必须要return
axios.interceptors.request.use(config=>{
  // console.log(config);
  // 在发起请求时开启进度条
  Nprogress.start()
  config.headers.authorization = sessionStorage.getItem('token')
  return config;
})

//添加一个响应拦截器 将响应的信息中我们需要的data留下来  这样就不用每次发送请求之后还要对得到的数据进行结构赋值了
axios.interceptors.response.use(res=>{
  // 在响应成功时关闭进度条
  Nprogress.done()
  return res.data;
})

// 添加一个过滤器  
Vue.filter('dataFormat',function(time){
  var data = new Date(time)
  var y = (data.getFullYear()+'').padStart(2,0)
  var m = (data.getMonth()+1+'').padStart(2,0)
  var d = (data.getDate()+'').padStart(2,0)
  return `${y}-${m}-${d}`
})


Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
